package co.edu.udea.xyz.iu.client;

import co.edu.udea.xyz.iu.shared.dto.SolicitudGWT;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

public class Solicitud extends Composite {

	private static SolicitudUiBinder uiBinder = GWT.create(SolicitudUiBinder.class);

	interface SolicitudUiBinder extends UiBinder<Widget, Solicitud> {
	}

	@UiField
	TextBox id;
	
	@UiField
	TextBox estado;
	
	@UiField
	TextBox tipo;
	
	@UiField
	TextBox texto;
	
	@UiField
	TextBox cedula;
	
	@UiField
	TextBox sucursal;
	
	@UiField
	TextBox producto;
		
	@UiField
	Button guardar;
	
	@UiField
	Button cancelar;
	
	
	private ListarSolicitudes listaSolicitudes;
	
	
	public Solicitud() {
		initWidget(uiBinder.createAndBindUi(this));
		
		id.setFocus(true);
		
		cancelar.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				limpiarCampos();
				
			}
		});
		
		guardar.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				Window.alert("Se guardo....");
				guardar();
			}
		});
		
	}

	private void guardar(){
		if("".equals(id.getText())){
			Window.alert("Debe digitar la id de la solicitud");
			return;
		}
		if("".equals(tipo.getText())){
			Window.alert("Debe digitar el tipo de la solicitud");
			return;
		}
		if("".equals(estado.getText())){
			Window.alert("Debe digitar el estado de la solicitud");
			return;
		}
		if("".equals(texto.getText())){
			Window.alert("Debe digitar el texto de la solicitud");
			return;
		}
		if("".equals(cedula.getText())){
			Window.alert("Debe digitar su cedula");
			return;
		}
		if("".equals(sucursal.getText())){
			Window.alert("Debe digitar la sucursal donde realiza la solicitud");
			return;
		}
		if("".equals(producto.getText())){
			Window.alert("Debe digitar el producto de la solicitud");
			return;
		}
		//Se guarda en la base de datos
		SolicitudService.util.getInstance().guardarSolicitud(id.getText(), tipo.getText(), estado.getText(), 
				texto.getText(), cedula.getText(), sucursal.getText(), producto.getText(), new AsyncCallback<Void>() {
			
			@Override
			public void onSuccess(Void result) {
				procesarResultado();
			}
			
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("No se pudo guardar en base de datos."+ caught.getMessage());
				
			}
		});
	}
	
	
	private void limpiarCampos(){
		id.setText("");
		estado.setText("");
		tipo.setText("");
		texto.setText("");
		cedula.setText("");
		sucursal.setText("");
		producto.setText("");
		
		id.setFocus(true);
		
		
	}

	public ListarSolicitudes getListaSolicitudes() {
		return listaSolicitudes;
	}

	public void setListaSolicitudes(ListarSolicitudes listaSolicitudes) {
		this.listaSolicitudes = listaSolicitudes;
	}
	
	public void procesarResultado(){
		int idSolicitud = Integer.parseInt(id.getText());
		String estado_Solicitud = estado.getText();
		int tipo_Solicitud = Integer.parseInt(tipo.getText());
		
		SolicitudGWT solicitudGWT = new SolicitudGWT();
		solicitudGWT.setIdSolicitud(idSolicitud);
		solicitudGWT.setEstado(estado_Solicitud);
		solicitudGWT.setTipo_Solicitud(tipo_Solicitud);
		
		listaSolicitudes.agregarSolicitud(solicitudGWT);
		listaSolicitudes.setVisible(true);
		this.setVisible(false);
		
	}
	
}
